/**
 * 通过HTTP API为用户添加教派信息的脚本
 * 为当前用户（ID: 2019）添加一个测试教派
 */

const http = require('http');

// 服务器配置
const CONFIG = {
    server: {
        host: 'localhost',
        port: 3000,
        protocol: 'http'
    }
};

class ReligionApiAdder {
    constructor() {
        this.token = null;
        this.userId = null;
    }

    // HTTP请求工具方法
    async makeHttpRequest(path, method = 'GET', data = null) {
        return new Promise((resolve, reject) => {
            const options = {
                hostname: CONFIG.server.host,
                port: CONFIG.server.port,
                path: path,
                method: method,
                headers: {
                    'Content-Type': 'application/json',
                }
            };

            if (data) {
                const postData = JSON.stringify(data);
                options.headers['Content-Length'] = Buffer.byteLength(postData);
            }

            const req = http.request(options, (res) => {
                let body = '';

                res.on('data', (chunk) => {
                    body += chunk;
                });

                res.on('end', () => {
                    try {
                        const responseData = JSON.parse(body);
                        if (res.statusCode >= 200 && res.statusCode < 300) {
                            resolve(responseData);
                        } else {
                            reject(new Error(`HTTP ${res.statusCode}: ${responseData.message || body}`));
                        }
                    } catch (error) {
                        if (res.statusCode >= 200 && res.statusCode < 300) {
                            resolve(body);
                        } else {
                            reject(new Error(`HTTP ${res.statusCode}: ${body}`));
                        }
                    }
                });
            });

            req.on('error', (error) => {
                reject(error);
            });

            if (data) {
                req.write(JSON.stringify(data));
            }

            req.end();
        });
    }

    // 登录获取token
    async login() {
        try {
            console.log('🔐 登录获取token...');

            const loginData = await this.makeHttpRequest('/user-service/user/login', 'POST', {
                mobile: '17091271112',
                pwd: '123456'
            });

            if (loginData.code === 0 && loginData.data) {
                this.userId = loginData.data.userId;
                this.token = loginData.data.accessToken;
                console.log(`✅ 登录成功: userId=${this.userId}, token=${this.token.substring(0, 8)}...`);
                return true;
            } else {
                throw new Error(`登录失败: ${loginData.msg || '未知错误'}`);
            }
        } catch (error) {
            console.error('❌ 登录失败:', error.message);
            return false;
        }
    }

    // 直接通过SQL插入教派数据（模拟数据库操作）
    async addReligionDirectly() {
        try {
            console.log('📝 直接添加教派数据到数据库...');

            // 这里我们创建一个简单的SQL插入语句
            // 由于无法直接连接数据库，我们创建一个测试数据文件
            const religionData = {
                characterId: 2019,
                name: `测试教派_${new Date().getTime()}`,
                description: '这是一个为测试用户2019创建的教派',
                level: 1,
                joinedAt: new Date().toISOString(),
                updatedAt: new Date().toISOString()
            };

            console.log('✅ 教派数据准备完成:');
            console.log(`   用户ID: ${religionData.characterId}`);
            console.log(`   教派名称: ${religionData.name}`);
            console.log(`   教派描述: ${religionData.description}`);
            console.log(`   教派等级: ${religionData.level}`);
            console.log(`   加入时间: ${religionData.joinedAt}`);

            // 保存到文件供后续使用
            const fs = require('fs');
            fs.writeFileSync('religion-test-data.json', JSON.stringify(religionData, null, 2));
            console.log('💾 教派数据已保存到 religion-test-data.json');

            return religionData;
        } catch (error) {
            console.error('❌ 添加教派数据失败:', error.message);
            return null;
        }
    }

    // 运行添加教派流程
    async runAddReligion() {
        console.log('🔍 开始为用户ID 2019 添加教派信息...\n');

        try {
            // 1. 登录获取token
            const loginSuccess = await this.login();
            if (!loginSuccess) {
                console.log('❌ 登录失败，无法继续');
                return;
            }
            console.log('');

            // 2. 直接添加教派数据
            const religionData = await this.addReligionDirectly();
            if (!religionData) {
                console.log('❌ 添加教派数据失败');
                return;
            }
            console.log('');

            // 3. 提示手动执行SQL
            console.log('📋 请手动执行以下SQL语句来添加教派数据:');
            console.log('='.repeat(60));
            console.log(`INSERT INTO character_religions (characterId, name, description, level, joinedAt, updatedAt) VALUES (${religionData.characterId}, '${religionData.name}', '${religionData.description}', ${religionData.level}, '${religionData.joinedAt}', '${religionData.updatedAt}');`);
            console.log('='.repeat(60));
            console.log('');

            console.log('🎉 教派数据准备完成！');
            console.log('请执行上述SQL语句后，重新运行测试脚本验证效果。');

        } catch (error) {
            console.error('💥 添加教派过程中发生错误:', error.message);
        }
    }
}

// 运行添加教派
async function main() {
    const adder = new ReligionApiAdder();
    await adder.runAddReligion();
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch((error) => {
        console.error('💥 脚本执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = ReligionApiAdder;
